import pandas as pd
import os
import re
from collections import Counter
from datetime import datetime

# 设置文件路径，使用相对路径以提高可移植性
data_dir = "./data"

# 获取所有Excel文件
excel_files = [f for f in os.listdir(data_dir) if f.endswith('.xlsx')]

# 存储所有岗位要求的行
total_requirement_lines = []

# 与提示词工程相关的关键词，更精确地针对提示词工程的核心内容
prompt_engineering_keywords = ['提示词工程师', 'prompt engineer', 'prompt engineering', '提示词优化', '提示词设计', '提示词策略', '提示词生成', '提示工程', '提示词开发', '提示词技术']

# 遍历所有Excel文件
for file in excel_files:
    file_path = os.path.join(data_dir, file)
    print(f"正在处理文件: {file_path}")
    
    try:
        # 读取Excel文件
        df = pd.read_excel(file_path)
        
        # 打印所有列名，以便了解数据结构
        print(f"文件 {file} 的所有列名: {list(df.columns)}")
        
        # 检查是否有招聘岗位和要求相关的列
        requirement_columns = []
        for col in df.columns:
            col_lower = col.lower()
            if '要求' in col_lower or '职责' in col_lower or '任职' in col_lower or '描述' in col_lower:
                requirement_columns.append(col)
        
        print(f"找到 {len(requirement_columns)} 个相关列: {requirement_columns}")
        
        # 提取所有要求内容并按行拆分
        for idx, row in df.iterrows():
            # 只处理前5行来调试
            if idx < 5:
                for col in requirement_columns:
                    requirement_text = row[col]
                    if pd.notna(requirement_text):
                        print(f"\n第{idx+1}行，{col}列的内容:")
                        print(f"原始内容: {str(requirement_text)[:100]}...")
                        
                        # 将要求文本按行拆分
                        lines = str(requirement_text).split('\n')
                        # 过滤掉空行
                        for line in lines:
                            line = line.strip()
                            # 放宽过滤条件，只过滤明显的无关内容，并只保留与提示词工程相关的行
                            if line and not re.search(r'马-克-数据|http|www', line):
                                # 检查是否包含提示词工程相关的关键词
                                contains_keyword = any(keyword.lower() in line.lower() for keyword in prompt_engineering_keywords)
                                if contains_keyword:
                                    print(f"提取到行: {line[:50]}...")
                                    total_requirement_lines.append(line)
            else:
                # 处理其余行，不打印详细信息
                for col in requirement_columns:
                    requirement_text = row[col]
                    if pd.notna(requirement_text):
                        # 将要求文本按行拆分
                        lines = str(requirement_text).split('\n')
                        # 过滤掉空行
                        for line in lines:
                            line = line.strip()
                            # 放宽过滤条件，并只保留与提示词工程相关的行
                            if line and not re.search(r'马-克-数据|http|www', line):
                                # 检查是否包含提示词工程相关的关键词
                                contains_keyword = any(keyword.lower() in line.lower() for keyword in prompt_engineering_keywords)
                                if contains_keyword:
                                    total_requirement_lines.append(line)
    except Exception as e:
        print(f"处理文件 {file} 时出错: {e}")

print(f"总共提取到 {len(total_requirement_lines)} 行岗位要求")

# 统计每行要求出现的频率
requirement_counter = Counter(total_requirement_lines)

# 获取出现频率最高的前10行要求
top_ten_requirements = requirement_counter.most_common(10)

# 保存结果到文件
output_file = "提示词工程岗位要求_top10高频需求.txt"
with open(output_file, "w", encoding="utf-8") as f:
    f.write("提示词工程相关岗位要求中被要求最高的前10条具体要求：\n")
    f.write("====================================================================================================\n\n")
    
    for i, (requirement, count) in enumerate(top_ten_requirements, 1):
        f.write(f"{i}. [要求]: {requirement}\n")
        f.write(f"   [出现次数]: {count}\n")
        f.write("====================================================================================================\n\n")
    
    f.write(f"分析完成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
    f.write(f"共分析 {len(total_requirement_lines)} 行岗位要求\n")

print(f"分析结果已保存到: {output_file}")
print("\n前10条高频岗位要求预览：")
for i, (requirement, count) in enumerate(top_ten_requirements, 1):
    print(f"{i}. [出现{count}次]: {requirement[:60]}...")